#ifndef _MyUart_H
#define _MyUart_H


//*********************************************************************//
//				2025/6/17
//(严重bug上电就进空闲中断不停止，无相关资料，留作标记，有解决方案再改)
//暂时找不到原因，等我用STM32跑一遍程序试试
//				2025/6/19
//使用STM32出现同一问题，使用示波器排查后发现问题： 公司漏电！！！
//*********************************************************************//




#include "gd32e230.h"                   // Device header
#include "stdio.h"
#include "stdarg.h"
#include "string.h"

#define UART0_RX_SIZE 2048  							//bootloader接收缓存数组大小
#define UART0_TX_SIZE 2048  							//bootloader发送缓存数组大小
#define UART0_RX_MAX  256   							//bootloader接收片段最大长度
#define NUM  					10									//缓冲区分块数
		
//bootloader 缓冲管理控制结构体		
typedef struct		
{		
	uint8_t *start;													//接收块头指针
	uint8_t *end;	 													//接收块尾指针
}BL_UART_BUFF_PTR;												//bootloader_串口_缓冲区_指针
		
typedef struct		
{		
	uint16_t URxCounter;										//接收数据计数		
	BL_UART_BUFF_PTR 		URxDataPtr[NUM];		//每段数据的头尾指针数组
	BL_UART_BUFF_PTR 		*URxDataIn;     		//当前数据接收到位置指针
	BL_UART_BUFF_PTR 		*URxDataOut;				//当前数据输出到位置指针
	BL_UART_BUFF_PTR 		*URxDataEnd;				//尾指针
}UCB_CB;


extern uint8_t U0_RxBuff[UART0_RX_SIZE];	//定义接收缓存数组
extern uint8_t U0_TxBuff[UART0_TX_SIZE];	//定义发送缓存数组
extern UCB_CB 	BL_CB;										//bootloader控制块

//初始化USART0
//参数：bandrate 波特率
//无返回值
void MyUsart0_Init(uint32_t bandrate);

//UASRT0的DMA初始化
//使用DMA转运bootloader接收到的程序
//无参
//无返回值
void MyUsart0_DMA_Init(void);

//BootLoader接收指针初始化
void BootLoader_Rx_Ptr_Init(void);

//可变长串口重定向
void U0_printf(char * format,...);

//串口重定向
int fputc(int ch ,FILE* f);
#endif


